#ifndef Decl_h__
#define Decl_h__

#include "../infLib/infLib.h"

class KeyValue {
public:
    const char* key;
    const char* value;
};

class Decl {
public:
    virtual ~Decl() {}

    virtual const char*     GetName() const = 0;

    virtual int             GetNumKeyvalues() const = 0;
    virtual const KeyValue  GetKeyValue(int i) const = 0;
    virtual const KeyValue  FindKey( const char* key ) const = 0;
    virtual int             FindKeyIndex( const char* key ) const = 0;

    virtual void            GetString( const char* key, const char*& value, const char *defaultString = "" ) const = 0;
    virtual void            GetFloat( const char *key, float& value, const char *defaultString = "0" ) const = 0;
    virtual void            GetInt( const char *key, int& value, const char *defaultString = "0" ) const = 0;
    virtual void            GetBool( const char *key, bool& value, const char *defaultString = "0" ) const = 0;
    virtual void            GetVec3( const char *key, inf::Vec3& value, const char *defaultString = NULL ) const = 0;
    virtual void            GetVec2( const char *key, inf::Vec2& value, const char *defaultString = NULL ) const = 0;
    virtual void            GetVec4( const char *key, inf::Vec4& value, const char *defaultString = NULL ) const = 0;
    virtual void            GetAngles( const char *key, inf::Angles& value, const char *defaultString = NULL ) const = 0;
    virtual void            GetMat3( const char *key, inf::Mat3& value, const char *defaultString = NULL ) const = 0;
    virtual void            GetColor3( const char* key, inf::Color3& value, const char* defaultString = NULL ) const = 0;
    virtual void            GetColor4( const char* key, inf::Color4& value, const char* defaultString = NULL ) const = 0;
};

#endif // Decl_h__